package com.guang.lock;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author lg
 * @Description
 * @date 2022/10/17 10:54
 */

/**
 * 首先谈到了为什么要来使用多线程？
 *   1、性能；
 *   2、追求性能的同时可能会产生的数据安全问题；
 * 并发：并发是为了解决多个线程在同一个时刻访问共享资源而带来的数据的不安全性，不稳定性等
 * 同步：为了解决并发问题，给某个线程赋予指定权限来进行执行。
 *      让多个线程排队执行，而在某个时间段内，让单个线程操作，从而避免了线程安全问题
 *      那么从效果上来看，可以通过某个介质让多个线程之间可以具备通信能力 ——------->锁
 *      通常如果想要多个线程之间具备协调能力，那么通常是while循环来起到作用
 */
public class ReentrantLockDemo1 {

    private final static Logger logger = LoggerFactory.getLogger(ReentrantLockDemo1.class);

    static ReentrantLock lock = new ReentrantLock();

    public static void main(String[] args) {

        Thread t1 = new Thread(() -> {
            lock.lock();
            logger.info("当前的线程名称是：{}",Thread.currentThread().getName());
            lock.unlock();
        }, "t1");
        t1.start();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Thread t2 = new Thread(() -> {
            lock.lock();
            logger.info("当前的线程名称是：{}",Thread.currentThread().getName());
            lock.unlock();
        }, "t2");
        t2.start();

    }
}
